Renaming columns in a data frame
Problem
You want to rename the columns in a data frame.
Solution
Start with a sample data frame with three columns:
d <- data.frame(alpha=1:3, beta=4:6, gamma=7:9) # alpha beta gamma # 1 4 7 # 2 5 8 # 3 6 9 names(d) # "alpha" "beta" "gamma"
Rename columns:
# Rename column by name: change "beta" to "two" names(d)[names(d)=="beta"] <- "two" # alpha two gamma # 1 4 7 # 2 5 8 # 3 6 9 # Rename by index in names list: change third item, "gamma", to "three" names(d)[3] <- "three" # alpha two three # 1 4 7 # 2 5 8 # 3 6 9
It's also possible to use R's string search-and-replace functions to rename columns. Note that the ^
and $
surrounding alpha
are there to ensure that the entire string matches. Without them, if there were a column named alphabet
, it would also match, and the replacement would be onebet
.
names(d) <- sub("^alpha$", "one", names(d)) # one two three # 1 4 7 # 2 5 8 # 3 6 9 # Across all columns, replace all instances of "t" with "X" names(d) <- gsub("t", "X", names(d)) # one Xwo Xhree # 1 4 7 # 2 5 8 # 3 6 9 # gsub() replaces all instances of the pattern in each column name. # sub() replaces only the first instance in each column name.